package demo1;


/**
 * Created with IntelliJ IDEA
 * Description：继承
 * User：chenshu
 * Date：2023-10-19
 * Time：08:40
 */
class Animal {
    private String sex;
    private int age;

    static {
        System.out.println("Animal的静态代码块");
    }
    {
        System.out.println("Animal的实例代码块");
    }
    public Animal() {
        System.out.println("Animal的无参构造方法");
    }
    //写完父类的构造方法后，发现子类报错
    //原因是在自己写构造方法的之前，编译器会默认生成一个无参的构造函数
    //而子类的默认构造方法中会隐式调用一个super()
    public Animal(String sex, int age) {
        this.sex = sex;
        this.age = age;
        System.out.println("Animal的两个参数构造方法");
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

/**
 * 子类继承父类之后，一定要先创建父类，再创建子类
 */
class Cat extends Animal{
    String name;
    static {
        System.out.println("Cat的静态代码块");
    }
    {
        System.out.println("Cat的构造代码块");
    }
    public Cat() {
        super();//显示调用父类的构造方法，来初始化 子类从父类继承过来的东西
        System.out.println("Cat的无参构造方法");
    }

    public Cat(String sex, int age, String name) {
        //super必须放在第一行
        super(sex, age);
        this.name = name;
        System.out.println("Cat的三个参数构造方法");
    }
}
public class TestDemo {
    public static void main(String[] args) {
        System.out.println("====================");
        Cat cat = new Cat("公", 1, "米米" );
        System.out.println(cat.name + "：" + cat.getSex() + "," + cat.getAge());
        System.out.println("====================");
        Cat cat2 = new Cat();
    }
}
